class Solution:
    def findMaximizedCapital(self, k: int, w: int, profits: List[int], capital: List[int]) -> int:
        # 生成索引序列 并 根据资本值对索引进行升序排序
        n = len(capital)
        indexes = sorted([i for i in range(n)], key = lambda i: capital[i])

        pq = []  # 维护堆内利润值的大顶堆
        i = 0
        while k > 0:
            # 将启动资本小于等于当前资本的项目的利润加入大顶
            while i < n and capital[indexes[i]] <= w:
                heapq.heappush(pq, -profits[indexes[i]]) # 取相反数实现大顶堆
                i += 1
            if not pq:break# 没有可以启动的项目，后面启动资本更大的项目也无法启动，退出
            w += - heappop(pq) # 选择启动资本满足条件的项目中利润最大的那个，更新w
            k -= 1
        return w